package com.box.controller.weixin;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.box.entity.wx.AccessToken;
import com.box.entity.wx.WechatUserUnionID;
import com.box.service.wxservice.WeixinLoginService;
import com.box.utils.wx.AesUtil;
import com.box.utils.wx.Constanst;
import com.box.utils.wx.DateUtil;

/**   
*    
* 项目名称：MyBox   
* 类名称：WeixinLoginController   
* 类描述：   微信扫码登录Controller
* 创建人：君无邪   
* 创建时间：2019年10月9日 上午2:16:10   
* 修改人：君无邪 
* 修改时间：2019年10月9日 上午2:16:10   
* 修改备注：  https://www.java214.com 
* @version    
*    
*/ 
@Controller
@	RequestMapping("/wx")
public class WeixinLoginController {
	
	@Autowired
	private WeixinLoginService wxLoginService;
	
	  /**
     * 重定向到微信扫码登录地址
     * @return
     */
    @RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST})
    public String weixinLogin(){
        String url = wxLoginService.genLoginUrl();
        return "redirect:"+url;
    }
	
    /**
     * 回调地址处理
     * @param code
     * @param state
     * @return
     */
    @RequestMapping(value = "/return",method={RequestMethod.GET,RequestMethod.POST})
    public String callback(String code, String state,Model model) {
        String access_token=null;
        String openid=null;
        
        if (code != null && state != null) {
            // 验证state为了用于防止跨站请求伪造攻击
            String decrypt = AesUtil.decrypt(AesUtil.parseHexStr2Byte(state), AesUtil.PASSWORD_SECRET_KEY, 16);
            if (!decrypt.equals(Constanst.PWD_MD5 + DateUtil.getYYYYMMdd())) {
              
                model.addAttribute("error", "登录失败，请联系管理员！");
                return "error/404";
            }
            AccessToken access = wxLoginService.getAccessToken(code);
            if (access != null) {
                // 把获取到的access_token和openId赋值给变量
                access_token=access.getAccess_token();
                openid=access.getOpenid();

                // 存在则把当前账号信息授权给扫码用户
                // 拿到openid获取微信用户的基本信息

                // 此处可以写业务逻辑

                WechatUserUnionID userUnionID = wxLoginService.getUserUnionID(access_token,openid);
               
                model.addAttribute("userInfo", userUnionID);
 
                return "Wx/userInfo";

            }
        }
        return null;
    }

}
